import QtQuick 1.0
import "Components"
import "Util/Util.js" as Util
import "Util/SettingManager.js" as SettingManager
import "WebAccess/TwitterAPI.js" as TwitterAPI

Rectangle {
    id: _rootContainer
    width: 360
    height: 600
    color: "#000000"

    //設定データ
    Item{
        id: _globalSetting
        property string versionNumber: "0.4"                  //バージョン番号

        //全般
        property int updateInterval: 60                         //更新間隔（秒）
        property int inReplyCountMax: 4                         //返信元を追いかける回数

        //背景
        property string wallpaperPath: "../../wallpaper.jpg"    //壁紙パス
        property color backgroundColor: "#000000"               //背景色
        property real backgroundOpacity: 0.8                    //背景の透過率（0.0～1.0）

        // アイテムの背景
        property color itemBkColor: "#00000000"                 // アイテムの背景色
        property color itemBkColorForMe: "#33aa5500"            // アイテムに自分のIDが含まれている場合の背景色
        property color itemBkColorPressed: "#33dd0000"          // アイテムを押した時の背景色
        property color itemBkColorHover: "#33ffffff"            // アイテムの上にカーソルを合わせた時の背景色
        property color itemBkColorSelected: "#440000ff"         // アイテムを選択した時の背景（カーソルの色）
        //フォントカラー
        property color fontColorTitle: "#aaaadd"                //タイトル（ユーザー名）
        property color fontColorMessage: "#dddddd"              //本文（ツイート）
        property color fontColorInfomation: "#aaaaaa"           //情報（時間など）

        //フォントサイズ
        property int fontPointSizeTitle: 10                     //タイトル（ユーザー名）
        property int fontPointSizeMessage: 12                   //本文（ツイート）
        property int fontPointSizeInfomation: 8                 //情報（時間など）

        //スクロールバー
        property color scrollBarColor: "#ffffff"                //スクロールバー（色）
        property real scrollBarOpacity: 0.7                     //スクロールバー（透過）
    }

    //アイテムをクリックしてメニューだして何か処理させる時の情報を保存する
    Item{
        id: _selectItemInfo

        property string itemId: ""      //主にステータスID入れるのに使う
        property string screenName: ""  //screen nameの保存
        property string message: ""     //本文
        property bool isFavorite: false //お気に入り
        property bool isFollow: false   //フォローしているか

//        property variant item: null      //デリゲートそのもの

        property string listId: ""      //listの内容を表示する時のID
        property string listName: ""    //listの名前


        property int mouse_x: -1         //マウスがクリックした場所
        property int mouse_y: -1         //マウスがクリックした場所

        //使ったらクリアする
        function clear(){
            itemId = "";
            screenName = "";
            message = "";
            isFavorite = false;
            isFollow = false;
//            mouse_x = -1; // ここで消すと消える時に位置が移動するのでダメ
//            mouse_y = -1;
//            item = null;
        }
    }

    // 0 -> 1 : コンテンツ -> Edit
    // 1 -> 2 : Edit -> ボタン
    // 2 -> 0 : ボタン -> コンテンツ
    function setNextFocus(current, increment){
        if(increment){
            current++;
        }else{
            current--;
        }
        if(state === "NoneTweet"){
            // 展開してないときは開く
            openTweetContainer(true);
        }else if(current > 2){
            current = 0;
        }else if(current < 0){
            current = 2;
        }

        // フォーカスセット
        switch(current){
        case 0:
            // 0 : コンテンツ
            _contentContainer.setFocusActiveListView();
            break;
        case 1:
            // 1 Edit
            _tweetContainer.setFocusTextEdit(true);
            break;
        case 2:
            // 2 : ボタン
            _tweetContainer.setFocusButton(true);
            break;
        default:
            break;
        }
    }

    // 入力へフォーカスを当てる
    function setFocusTextEdit(is){
        if(is){
            // ? -> 1 : ? -> Edit
            _tweetContainer.setFocusTextEdit(true);
        }else{
            // 1 -> ? : Edit -> ?
            _contentContainer.setFocusActiveListView();
        }
    }

    // ツイートコンテナを開閉する
    function openTweetContainer(is_open){
        if(is_open){
            if(state === ""){
            }else{
                state = "";
            }
        }else{
            if(state === "NoneTweet"){
            }else{
                state = "NoneTweet";
            }
        }
    }
    // ツイートコンテナが開いてるか
    function isOpenTweetContainer(){
        var ret = true;
        if(state === "NoneTweet"){
            ret = false;
        }
        return ret;
    }



    //壁紙
    Image {
        id: _wallpaper
        anchors.fill: parent
        source: _globalSetting.wallpaperPath
        fillMode: Image.PreserveAspectCrop
        clip: true
        smooth: true
    }

    //アクションバーの管理
    ActionBar {
        id: _actionBar
        anchors.left: _rootContainer.left
        anchors.top: _rootContainer.top
        width: _rootContainer.width

        //くるくる回す
//        loading: _contentContainer.loading

//        MouseArea {
//            anchors.fill: parent

//            onClicked: {
//                _toast.show("homhom");

////                _container.timelineSource = TwitterAPI.getTimelineURL();
////                _container.state = "";

////                var url = TwitterAPI.getTimelineURL();
////                Qt.openUrlExternally("http://relog.xii.jp/?param=a%3Db=");

////                console.log("action bar click : "+url);
////                console.log("homhom:" + TwitterAPI.getTimelineURL());
//            }
//        }
    }

    //つぶやきを入力するエリアの管理
    TweetContainer {
        id: _tweetContainer
        anchors.left: _rootContainer.left
        anchors.top: _actionBar.bottom
        anchors.right: _rootContainer.right
        height: 50
        opacity: 1
    }

    //実際の内容を表示する
    Container {
        id: _contentContainer
        color: _globalSetting.backgroundColor
        opacity: _globalSetting.backgroundOpacity
        anchors.left: _rootContainer.left
        anchors.top: _tweetContainer.bottom
        anchors.right: _rootContainer.right
        anchors.bottom: _rootContainer.bottom

    }

    // 前面に表示するダイアログのステーと管理
    DialogContainer {
        id: _dialogContainer
        anchors.fill: parent
    }

    //全面に表示するメニューのステート管理
    MenuContainer {
        id: _menuContainer
        anchors.fill: parent
    }

    //Anroidのトースト的なもの
    Toast{
        id: _toast

        x: (_rootContainer.width / 2 - width / 2)
        y: (_rootContainer.height / 2 - height / 2)
    }

    //ロード完了
    Component.onCompleted: {
        Util.outputDebugString("Main load completed");

        //ウインドウサイズ調節
        width = SettingManager.getMainWindowWidth();
        height = SettingManager.getMainWindowHeight();
        // 一般設定
        _globalSetting.updateInterval = SettingManager.getUpdateInterval();
        _globalSetting.inReplyCountMax = SettingManager.getInReplyToCountMax();

        //ツイートエリアを隠す
        openTweetContainer(false);

        //認証情報の確認
        if(TwitterAPI.checkAuthInfo()){
            //更新
            _contentContainer.update();
        }else{
            //Auth
            _menuContainer.state = "Auth";
        }
    }


    //閉じる時
    Component.onDestruction: {
        Util.outputDebugString("Main onDestruction");

        //ウインドウサイズ調節
        SettingManager.setMainWindowWidth(width);
        SettingManager.setMainWindowHeight(height);
        // 一般設定
        SettingManager.setUpdateInterval(_globalSetting.updateInterval);
        SettingManager.setInReplyToCountMax(_globalSetting.inReplyCountMax);
    }

    states: [
        State {
            name: "NoneTweet"

            PropertyChanges {
                target: _tweetContainer
                opacity: 0
                height: 0
            }
        }
    ]

    transitions: Transition {
        SequentialAnimation{
            ScriptAction {
                script: setFocusTextEdit(!(state === "NoneTweet"));
            }

            NumberAnimation {
                easing.type: Easing.OutCubic
                target: _tweetContainer
                properties: "opacity, height"
                duration: 500
            }
        }

    }
}
